import configs from "@/common/config.js"

export default {
	data() {
		return {
			chatData: {},
			// socket: '',
			hbTimer: '',
			hbDelay: 25000,
			rcTimer: '',
			count: 0,
			socketStatus: 0,
			// const rcTimes = 6;
			rcDelay: 10000,
			CurrentCall: []

		}

	},
	methods: {

		initSoket() {
			// console.log('xxxx')
			if (!this.beforeInit()) return;

			this.socket = uni.connectSocket({
				url: `${configs.WebSocketURl}webSocket/${this.getLoginName()}`,
				complete: (res) => {
					console.log(res)
				},
			});
			console.log('xxxx', `${configs.WebSocketURl}webSocket/${this.getLoginName()}`)
			this.socket.onOpen(() => {
				console.log('Socket已打开！');
				this.count = 0;
				this.socketStatus = 10;
				clearInterval(this.hbTimer);
				clearInterval(this.rcTimer);
				this.heartBeat(); // 心跳
				// chatSocketStatus.value = SOCKET_STATUS.CONNECTED;
			});
			this.socket.onError((err) => {
				console.log('Socket打开失败！');
				console.error(err);
				this.socketStatus = 0;
				// chatSocketStatus.value = SOCKET_STATUS.OFFLINE;
				this.reconnect();
			});
			this.socket.onClose((err) => {
				console.log('Socket已断开！');
				console.error(err);
				this.socketStatus = 0;
				// chatSocketStatus.value = SOCKET_STATUS.OFFLINE;
				this.reconnect();
			});
			this.socket.onMessage((res) => {
				console.log('收到消息', res)
				this.formatMessage(res.data);
			});
		},
		heartBeat() {
			const pingData = {
				message: 'ping',

			};
			this.send(pingData);
			this.hbTimer = setInterval(() => {
				this.send(pingData);
			}, this.hbDelay);
		},

		beforeInit() {
			if (this.socketStatus > 0) return false;
			this.socket?.close(); // 关闭之前的socket
			return true;
		},
		// 发送消息
		send(value) {
			this.socket.send({
				data: JSON.stringify(value),
				success: () => {
					console.log('发送成功');
				},
			});
		},
		reconnect(leading = false) {
			clearInterval(hbTimer);
			if (leading) {
				init();
				return;
			}
			this.rcTimer = setTimeout(() => {
				count++;
				console.error(`Socket尝试重连（第${count}次）`);
				init();
			}, rcDelay);
		},
		async formatMessage(data) {
			const info = JSON.parse(data);

			this.soketCall(info)
			// this.CurrentCall

			// methods.value.socketMessageCallback(info);
			// send({
			// 	message: info,
			// 	code: 200,
			// 	type: 'CLIENT',
			// 	accessToken: token.value,
			// });

		}
	}
}
// export const useSocket = ({
// 	chatData
// }: {
// 	chatData: any;
// }) => {
// 	let socket: any;
// 	let hbTimer: any;
// 	const hbDelay = 25000;
// 	let rcTimer: any;
// 	let count = 0;
// 	let socketStatus = 0;
// 	// const rcTimes = 6;
// 	const rcDelay = 10000;

// 	const {
// 		token
// 	} = storeToRefs(user());
// 	const {
// 		currentApp,
// 		currentChat,
// 		methods
// 	} = storeToRefs(chat());
// 	const {
// 		chatSocketStatus
// 	} = storeToRefs(global());

// 	async function initSocket() {
// 		init();

// 		function beforeInit() {
// 			if (socketStatus > 0) return false;
// 			if (!token.value) return false;
// 			socket?.close(); // 关闭之前的socket
// 			return true;
// 		}

// 		function init() {
// 			if (!beforeInit()) return;

// 			socket = uni.connectSocket({
// 				url: `${configs.BASEURL}?accessToken=${token.value}`,
// 				complete: () => {},
// 			});

// 			socket.onOpen(() => {
// 				console.log('Socket已打开！');
// 				count = 0;
// 				socketStatus = 10;
// 				clearInterval(hbTimer);
// 				clearInterval(rcTimer);
// 				heartBeat(); // 心跳
// 				chatSocketStatus.value = SOCKET_STATUS.CONNECTED;
// 			});
// 			socket.onError((err: any) => {
// 				console.log('Socket打开失败！');
// 				console.error(err);
// 				socketStatus = 0;
// 				chatSocketStatus.value = SOCKET_STATUS.OFFLINE;
// 				reconnect();
// 			});
// 			socket.onClose((err: any) => {
// 				console.log('Socket已断开！');
// 				console.error(err);
// 				socketStatus = 0;
// 				chatSocketStatus.value = SOCKET_STATUS.OFFLINE;
// 				reconnect();
// 			});
// 			socket.onMessage((res: anyObj) => {
// 				formatMessage(res.data);
// 			});
// 		}

// 		function heartBeat() {
// 			const pingData = {
// 				message: 'ping',
// 				type: 'AUTHORIZATION',
// 				accessToken: token.value,
// 			};
// 			send(pingData);
// 			hbTimer = setInterval(() => {
// 				send(pingData);
// 			}, hbDelay);
// 		}

// 		function reconnect(leading = false) {
// 			clearInterval(hbTimer);
// 			if (leading) {
// 				init();
// 				return;
// 			}
// 			rcTimer = setTimeout(() => {
// 				count++;
// 				console.error(`Socket尝试重连（第${count}次）`);
// 				init();
// 			}, rcDelay);
// 		}
// 	}

// 	// 发送消息
// 	function send(value: any) {
// 		socket.send({
// 			data: JSON.stringify(value),
// 			success: () => {
// 				// console.log('发送成功');
// 			},
// 		});
// 	}
// 	methods.value.socketSendMessage = send;
// 	methods.value.clearUnRead = updateUnRead;
// 	methods.value.initSocket = initSocket;

// 	// 更新未读消息
// 	function updateUnRead() {
// 		const data = currentChat.value;
// 		const idx = chatData.value.findIndex((i: anyObj) => i.chatId === data.chatId);
// 		if (idx === -1) return;
// 		chatData.value[idx].unreadMessage = 0;
// 	}

// 	async function formatMessage(data: string) {
// 		const info = JSON.parse(data);
// 		if (info.userType === 0) return;
// 		if (info.status === -401) {
// 			// 授权失效
// 			socket.close();
// 			uni.reLaunch({
// 				url: '/pages/login/index',
// 			});
// 			return;
// 		}
// 		// console.log('收到消息：');
// 		// console.log(info);
// 		methods.value.socketMessageCallback(info);
// 		send({
// 			message: info,
// 			code: 200,
// 			type: 'CLIENT',
// 			accessToken: token.value,
// 		});
// 		switch (info?.type) {
// 			case SOCKET_TYPE.CLEAR_UNREAD:
// 				// clearUnRead(info);
// 				break;
// 			case SOCKET_TYPE.TO_AI:
// 				// await refreshSort(info);
// 				// refreshContent(info, 1);
// 				break;
// 			case SOCKET_TYPE.TO_MANUAL:
// 				// await refreshSort(info);
// 				// refreshContent(info, 2);
// 				break;
// 			case SOCKET_TYPE.TRANSFER:
// 				// 转接
// 				// refreshTransfer(info);
// 				break;
// 			case SOCKET_TYPE.UPDATE_GROUP_INFO:
// 				// refreshGroup(info);
// 				break;
// 			case SOCKET_TYPE.CHAT_SYSTEM_MESSAGE:
// 			case SOCKET_TYPE.SINGLE_SENDING:
// 			case SOCKET_TYPE.GROUP_SENDING:
// 			case SOCKET_TYPE.FILE_MSG_SINGLE_SENDING:
// 			case SOCKET_TYPE.FILE_MSG_GROUP_SENDING:
// 				// await refreshSort(info);
// 				// refreshContent(info);
// 				break;
// 			default:
// 				if (info.status === -2) {
// 					uni.showToast({
// 						title: info.errorMsg,
// 						icon: 'none',
// 					});
// 					return;
// 				}
// 				break;
// 		}
// 	}

// 前置拦截
// function beforeIntercept(data : anyObj) {
// 	if (currentApp.value.id !== data.applicationId) return -1;
// 	const idx = chatData.value.findIndex((i : anyObj) => i.chatId === data.chatId);
// 	if (idx === -1) return -2;
// 	return idx;
// }
// // 刷新排序
// async function refreshSort(data : anyObj) {
// 	// 不是当前应用的不处理
// 	if (currentApp.value.id !== data.applicationId) return;

// 	const idx = chatData.value.findIndex((i : anyObj) => i.chatId === data.chatId);
// 	if (idx !== -1) {
// 		// 本地有的直接更换排序
// 		const len = chatData.value.length;
// 		chatData.value = [
// 			chatData.value[idx],
// 			...chatData.value.slice(0, idx),
// 			...chatData.value.slice(idx + 1, len),
// 		];
// 	} else {
// 		// 本地没有的 重新拉数据
// 		await getData(true, false);
// 	}
// }
// 刷新会话内容
// function refreshContent(data : anyObj, status ?: 1 | 2) {
// 	// 不是当前应用的不处理
// 	const idx = beforeIntercept(data);
// 	if (idx === -2) return getData(true, false); // 新联系人
// 	if (idx < 0) return;
// 	if (data.content || data.describe)
// 		chatData.value[idx].lastMassage = data.content || data.describe; // 有内容才更新
// 	if (data.miniAPPChatShowTime)
// 		chatData.value[idx].miniAPPChatShowTime = data.miniAPPChatShowTime; // 有时间才更新

// 	switch (status) {
// 		case 1:
// 			chatData.value[idx].chatBoxType = 0;
// 			return;
// 		case 2:
// 			chatData.value[idx].chatBoxType = 1;
// 			return;
// 	}
// 	// fix: ⬆会话控制不更新未读数
// 	if (data.type === SOCKET_TYPE.CHAT_SYSTEM_MESSAGE) return; // 系统消息不更新未读数
// 	if (chatData.value[idx].chatBoxType === CHAT_STATUS.AI) return; // AI状态不更新未读数
// 	chatData.value[idx].unreadMessage += 1;
// }
// // 刷新群信息
// function refreshGroup(data : anyObj) {
// 	const idx = beforeIntercept(data);
// 	if (idx < 0) return;
// 	chatData.value[idx].clientUserAvatar = data.groupAvatar;
// 	chatData.value[idx].clientUserName = data.groupName;
// }
// // 刷新转接
// function refreshTransfer(data : anyObj) {
// 	// 不是当前应用的不处理
// 	const idx = beforeIntercept(data);
// 	if (idx < 0) return;
// 	chatData.value[idx].serviceType = data.serviceType;
// 	chatData.value[idx].serviceEndTime = data.serviceEndTime;
// }
// // 清空未读数
// async function clearUnRead(data : anyObj) {
// 	const idx = beforeIntercept(data);
// 	if (idx < 0) return;
// 	await $sleep(1000);
// 	chatData.value[idx].unreadMessage = 0;
// }

// return {
// 	socket,
// 	initSocket,
// };
// };